        .xlist
; Include file - EPOCSER.INC
; Epoc/Os standard Serial Driver defines
; Copyright (c) Psion PLC 1989-90.
;
;  VER    DATE    BY  DESCRIPTION
; ----- -------- ---- -----------
; 2.00F 30/09/90 JH   Final release
; 2.01F 05/10/90 JH   Added a define for Constant speed DTE modems
;
EPOCSER_INC		equ	1
; Serial port characteristics
SerialCharEnt   struc
    SerialCharTbaud     db      ?       ; transmit Baud rate selector
    SerialCharRbaud     db      ?       ; receive Baud rate selector
    SerialCharFrame     db      ?       ; number of data, parity and stop bits
    SerialCharParity    db      ?       ; parity selector
    SerialCharHandshake db      ?       ; handshake flags 
    SerialCharXon       db      ?       ; XON character 
    SerialCharXoff      db      ?       ; XOFF character 
    SerialCharFlags     db      ?       ; control flags
    SerialCharTmask     dd      ?       ; terminator mask 
SerialCharEnt   ends

; Function numbers to use to call PDD functions
SerPDDFuncOpen          equ     0
SerPDDFuncClose         equ     2
SerPDDFuncStart         equ     4
SerPDDFuncStop          equ     6
SerPDDFuncSet           equ     8
SerPDDFuncSense         equ     10
SerPDDFuncControl       equ     12
SerPDDFuncEnquire       equ     14
SerPDDFuncEnable        equ     16
SerPDDFuncSetHandlerCS  equ     18

;
SERPARITY_ERR equ 0ffh
SERFRAME_ERR equ 0feh
SEROVERRUN_ERR equ 0fdh

SERNOCHAR equ   0ffffh

; Baud rates
P_BAUD_50       equ 01h
P_BAUD_75       equ 02h
P_BAUD_110      equ 03h
P_BAUD_134      equ 04h
P_BAUD_150      equ 05h
P_BAUD_300      equ 06h
P_BAUD_600      equ 07h
P_BAUD_1200     equ 08h
P_BAUD_1800     equ 09h
P_BAUD_2000     equ 0Ah
P_BAUD_2400     equ 0Bh
P_BAUD_3600     equ 0Ch
P_BAUD_4800     equ 0Dh
P_BAUD_7200     equ 0Eh
P_BAUD_9600     equ 0Fh
P_BAUD_19200    equ 10h
P_BAUD_38400    equ 11h
P_BAUD_56000    equ 12h
P_BAUD_115000	equ 13h	

; allocation of frame bits
P_DATA_FRM      equ 0fh         ; number of data bits mask 
P_DATA_5        equ 0h          ; 5 data bits
P_DATA_6        equ 1h          ; 6 data bits
P_DATA_7        equ 2h          ; 7 data bits
P_DATA_8        equ 3h          ; 8 data bits
P_TWOSTOP       equ 10h         ; 2 stop bits if set, 1 if clear
P_PARITY        equ 20h         ; 1 parity bit if set, 0 if clear

; parity - ignored unless P_PARITY is set
P_PAR_EVEN      equ 1h          ; even parity
P_PAR_ODD       equ 2h          ; odd parity
P_PAR_MARK      equ 3h          ; mark parity
P_PAR_SPACE     equ 4h          ; space parity

; handshaking control
P_OBEY_XOFF     equ 01h         ; respond to received XOFF (and XON) if set
P_SEND_XOFF     equ 02h         ; send XOFF/XON to control receive buf if set
P_IGN_CTS       equ 04h         ; ignore the state of CTS if set
P_OBEY_DSR      equ 08h         ; obey the state of DSR if set
P_FAIL_DSR      equ 10h         ; fail if DSR goes OFF if set 
P_OBEY_DCD      equ 20h         ; obey the state of DCD if set 
P_FAIL_DCD      equ 40h         ; fail if DCD goes OFF if set 

; flags control
P_IGNORE_PARITY equ     01h     ; ignore parity errors

; For P_FCTRL function
P_SRCTRL_CTS    equ 01h
P_SRCTRL_DSR    equ 02h
P_SRCTRL_DCD    equ 04h
P_SRCTRL_DTR    equ 08h
P_SRCTRL_RTS    equ 10h

P_SRDTR_ON      equ 1h          ; to set DTR to MARK
P_SRDTR_OFF     equ 2h          ; to set DTR to SPACE

; Bit masks for P_FINQ function
P_SRINQ_50      equ 0001h
P_SRINQ_75      equ 0002h
P_SRINQ_110     equ 0004h
P_SRINQ_134     equ 0008h
P_SRINQ_150     equ 0010h
P_SRINQ_300     equ 0020h
P_SRINQ_600     equ 0040h
P_SRINQ_1200    equ 0080h
P_SRINQ_1800    equ 0100h
P_SRINQ_2000    equ 0200h
P_SRINQ_2400    equ 0400h
P_SRINQ_3600    equ 0800h
P_SRINQ_4800    equ 1000h
P_SRINQ_7200    equ 2000h
P_SRINQ_9600    equ 4000h
P_SRINQ_19200   equ 8000h
; second baud rate word 
P_SRINQ_38400   equ 0001h
P_SRINQ_56000   equ 0002h

; 2nd set of info 
P_SRINQ_DATA5           equ 0001h       ; supports 5 data bits 
P_SRINQ_DATA6           equ 0002h       ; supports 6 data bits 
P_SRINQ_DATA7           equ 0004h       ; supports 7 data bits 
P_SRINQ_DATA8           equ 0008h       ; supports 8 data bits 
P_SRINQ_STOP2           equ 0010h       ; supports 2 stop bits (as well as 1) 
P_SRINQ_PAREVEN         equ 0020h       ; supports even parity 
P_SRINQ_PARODD          equ 0040h       ; supports odd parity 
P_SRINQ_PARMARK         equ 0080h       ; supports mark parity 
P_SRINQ_PARSPACE        equ 0100h       ; supports space parity 
P_SRINQ_SETDTR          equ 0200h       ; can set DTR 
P_SRINQ_SPLIT           equ 0400h       ; supports split Baud rates 
P_SRINQ_XONXOFF         equ 0800h       ; Supports soft xon/xoff characters

; CRC generator section
; The Low and High bytes of the 16 bit CRC
CrcEnt  struc
    CrcLow      db      ?       ; CRC low byte
    CrcHigh     db      ?       ; CRC high byte
CrcEnt  ends

;Serial Driver Media Access Control section (LLMAC)
;
P_MAXILEN equ 300               ; maximum length of information field

;Frame type codes
LA_LPDU equ 0                   ; The Link Acknowledge PDU 
LD_LPDU equ 1                   ; The Link disconnect PDU 
LR_LPDU equ 2                   ; The Link Request PDU
LT_LPDU equ 3                   ; The Link Data PDU 
P_FRM_BROKEN equ 4              ; A broken frame

FrameEnt struc
    FrameType   db      ?       ; frame type
    FrameSeq    db      ?       ; frame sequence
    FrameLen    dw      ?       ; length of information field
    FramePbuf   dw      ?       ; ptr to data buffer 
FrameEnt ends

; LLMAC layer characteristics
LlmacEnt struc
    LlmacIlen   dw      ?       ; maximum information field length
    LlmacSpeed dw       ?       ; nominal speed in characters per second
    LlmacRtint dw       ?       ; suggested retransmission interval
LlmacEnt ends

; LINK layer structures and defines
; IoFuncConnect service connection modes */
P_LINK_ACCP equ 0               ; want link as acceptor 
P_LINK_INIT equ 1               ; want link as initiator 

; Link layer states 
P_LINK_IDLE equ 0               ; no connection - idle 
P_LINK_IDLE_LR equ 1            ; no connection - awaiting LR
P_LINK_DATA_IDLE equ 2          ; connected - idle
P_LINK_DATA_LA equ 3            ; connected - awaiting LA
P_LINK_IDLE_LA equ 4            ; not connected - awaiting LA (or LT) to LR

;State and event log record
LinkLogEnt struc
    LinkLogState    db      ?   ; Link layer state (as defined above)
    LinkLogEvent    db      ?   ; Event that occured
LinkLogEnt ends

P_LINK_NLOG equ 32              ; Max number of debug events,states we record 
P_LINK_LOG_MASK equ 0C0h
P_LINK_LOG_PANIC equ 0C0h       ; panic number
P_LINK_LOG_MAC equ 0            ; MAC request or timer
P_LINK_LOG_REQ equ 80h          ; User request
P_LINK_LOG_COMP equ 40h         ; User completion

LinkDataEnt struc
    LinkDataLlmac  LlmacEnt     <>
    LinkDataBrokenCount dw      ?       ; count of broken frames
    LinkDataRetranCount dw      ?       ; re-transmission count
LinkDataEnt ends

; Comms I/O drivers shared code header structs
; Flag defines
RQ_TIMER equ 01h                ; a timer has been started 
RQ_SUPER equ 02h                ; a supervisory read has been started 
RQ_WRITE equ 04h                ; a write has been started 
RQ_READ equ 08h                 ; a data read has been started 
RQ_DISABLE_HANDLER equ 10h      ; set to disable handers
RQ_ANY equ (RQ_TIMER or RQ_SUPER or RQ_WRITE or RQ_READ)

;Flag bits to indicate various features of the link layer event.
QUEUE_XMIT_LA equ 20h           ; queue an LA when the transmit completes 
LINK_ACTIVE equ 40h             ; set between a P_FCONNECT and a disconnect 
USER_DATA_PENDING equ 80h

; DONT CHANGE THE ORDER OF THIS !!
IoRequestEnt    struc
        IoRequestChan           ChanEnt <>      ; I/O control block
        IoRequestWaitHandler    dw      ?       ; wait handler vector number
        IoRequestRqRead         RqEnt   <>      ; Read request packet
        IoRequestRqWrite        RqEnt   <>      ; Write request packet
        IoRequestRqSuper        RqEnt   <>      ; Supervisorry request packet
        IoRequestTimerPcb       dw      ?       ; open Timer cb
        IoRequestTimerStat      dw      ?       ; timer completion status
        IoRequestReadStat       dw      ?       ; read completion status
        IoRequestWriteStat      dw      ?       ; write completion status
        IoRequestSuperStat      dw      ?       ; supervisory completion status
        IoRequestFlags          db      ?       ; controlling flags
        IoRequestState          db      ?       ; current internal state
IoRequestEnt    ends

LnkEnt  struc
        LnkIoRequest            IoRequestEnt <> ; I/O header
        LnkLinkData             LinkDataEnt <>  ; Link layer data 
        LnkNumberLog            dw      ?       ; current log table event no.
        LnkLogTable             db (size LinkLogEnt)*P_LINK_NLOG dup (?)
LnkEnt ends

; XMODEM structures and defines
; IoFuncConnect service connection modes */
P_XMDM_ACCP equ 0               ; want link as acceptor 
P_XMDM_INIT equ 1               ; want link as initiator 
      
; Xmodem link types
P_XMDM_CRCORCHECKSUM    equ     0
P_XMDM_CRCMODE          equ     1
P_XMDM_CHECKSUMMODE     equ     2
P_YMODEM_MODE           equ     3
P_YMODEM_G_MODE         equ     4
P_XMDM_ONE_K            equ     8000h

;Xmodem/Ymodem supported flags 
P_FXMDM_SENSE           equ	0ffh    ; I/O function number
P_XSUP_XMODEM           equ	01h     ; original Xmodem checksum
P_XSUP_XMODEM_CRC       equ	02h     ; Xmodem with CRC
P_XSUP_ONE_K_OPTION     equ	04h     ; 1k frames
P_XSUP_YMODEM           equ	08h     ; Ymodem
P_XSUP_YMODEM_G         equ	10h     ; Ymodem-G

; Xmodem State defines
P_XMDM_IDLE             equ P_LINK_IDLE ; idle state (no connection)
P_XMDM_CONNECT_RECEIVE  equ     1       ; receive connect state
P_XMDM_CONNECT_TRANSMIT equ     2       ; Transmit connect state
P_XMDM_DATA_RECEIVE     equ     3       ; receive data state
P_XMDM_DATA_TRANSMIT    equ     4       ; transmit data state
P_XMDM_DATA_TRANSMIT_ACK equ    5       ; awaiting ACK to transmitted data

;State and event log record
XmdmLogEnt struc
        LinkLogEnt <>
XmdmLogEnt ends

P_XMDM_NLOG equ P_LINK_NLOG     ; Max number of debug events,states we record 
P_XMDM_LOG_MASK equ P_LINK_LOG_MASK
P_XMDM_LOG_PANIC equ P_LINK_LOG_PANIC       ; panic number
P_XMDM_LOG_REQ equ P_LINK_LOG_REQ           ; User request
P_XMDM_LOG_COMP equ P_LINK_LOG_COMP         ; User completion

; Modem driver info
; what options are selected
P_MDM_TONE      equ     01h
P_MDM_BELL      equ     02h
P_MDM_NO_MODULATION     equ     04h
P_MDM_CONSTANT_SPEED    equ     08h     ; modem provides constant speed interface if set

; error correction types
P_MDM_ERRCORRECT_NONE   equ     00h
P_MDM_ERRCORRECT        equ     01h
P_MDM_ERRCORRECT_MNP    equ     02h
P_MDM_ERRCORRECT_V42    equ     03h

ModemCharEnt    struc
        ModemCharSupport        dw      ?       ; flags saying what supported
        ModemCharOptions        dw      ?       ; Selected options
        ModemCharBaudRate       dw      ?       ; Baud rate running at
        ModemCharConnHand       db      ?       ; Connected handshaking
        ModemCharCallHand       db      ?       ; Wait for call handshaking
ModemCharEnt    ends

        .list
